const Koa = require('koa');
const app = new Koa();

// 路由中间件
// const route = require('koa-route');

// 静态资源的路由中间件
// const path = require('path');
// const serve = require('koa-static');

// const koaBody = require('koa-body');

// raw-body
const getRawBody = require('raw-body');
var contentType = require('content-type');

// app.use();


// const main = (ctx, next) => {
//   next();
//   console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);


//   console.log(ctx.state);
//   console.log('--------1');
//   console.log(ctx.state.gg);
//   console.log('--------2');


//   // let urlParamsObj = ctx.request.query;
//   // console.log(ctx.request.query);

//   if (true) {}
//   ctx.response.body = 'Hello World';
//   // ctx.response.body = '<xml>' +
//   //       '<ToUserName><![CDATA[oLywfwaX1N5RRjKuP1NlE0DZNiZ8]]></ToUserName>' +
//   //       '<FromUserName><![CDATA[gh_e053e72e8fb2]]></FromUserName>' +
//   //       '<CreateTime>' + (new Date).getTime() + '</CreateTime>' +
//   //       '<MsgType><![CDATA[text]]></MsgType>' +
//   //       '<Content><![CDATA[欢迎~]]></Content>' +
//   //       '</xml>';
// };
// // 但是在调用中间件时，会自动传递 ctx 进去
// app.use(main);

const funaaa = async (ctx, next) => {
  // console.log();
  console.log(ctx.req.headers['content-length']);
  
  // console.log(ctx.request.charset);没有
  // console.log(contentType.parse(ctx.req));// contentType.parse(ctx.req).parameters.charset 'utf-8'
  // contentType.parse(ctx.req).parameters 是一个空对象 {}
  console.log('---- funaaa');
  // await getRawBody(ctx.req, {
  //   length: ctx.request.length, // ctx.req.headers['content-length'],
  //   limit: '1mb',
  //   encoding: 'utf-8' // this.ctx.charset

  //   // ).then(data => {
  //   //   console.log('data ...');
  //   //   this.ctx.state.bodyXml = data.toString();
  //   //   console.log(this.ctx.state.bodyXml);
  //   // }).catch(err => {
  //   //   console.log('出错了');
  //   // });

  // }).then(data => {
  //   console.log('------then 的 data------');
  //   console.log(data);
  //   ctx.state.gg = data;
  // });
  
  ctx.state.gg = await getRawBody(ctx.req, {
    length: ctx.request.length, // ctx.req.headers['content-length'],
    limit: '1mb',
    encoding: 'utf-8' // this.ctx.charset
  });
  console.log('--------- gg ----------');
  console.log(ctx.state.gg);
  next();
};
app.use(funaaa);


const main = (ctx, next) => {
  next();
  console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);


  console.log(ctx.state);
  console.log('--------1');
  console.log(ctx.state.gg);
  console.log('--------2');


  let urlParamsObj = ctx.request.query;
  // console.log(ctx.request.query);

  if (urlParamsObj.echostr !== undefined) {
    
    ctx.response.body = urlParamsObj.echostr;
    return;
  }

  // ctx.response.body = 'Hello World';
  ctx.response.body = '<xml>' +
        '<ToUserName><![CDATA[oLywfwaX1N5RRjKuP1NlE0DZNiZ8]]></ToUserName>' +
        '<FromUserName><![CDATA[gh_e053e72e8fb2]]></FromUserName>' +
        '<CreateTime>' + (new Date).getTime() + '</CreateTime>' +
        '<MsgType><![CDATA[text]]></MsgType>' +
        '<Content><![CDATA[欢迎~]]></Content>' +
        '</xml>';
};
// 但是在调用中间件时，会自动传递 ctx 进去
app.use(main);


// const funaaa = ctx => {
//   console.log('funaaa');
// };
// app.use(funaaa);






app.listen(80);
console.log('server listening at 80');









